package com.sap.mall.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 * 1、整合mybatis-Plus
 * 1、)导入依赖
 * 2、）配置
 * 1、配置数据源
 * 2、配置Mybatis-Plus;
 * 1)使用@MapperScan
 * 2)告诉MyBatis-Plus,sql映射文件位置
 * <p>
 * 2、配置逻辑删除
 * 1)、配置全局的逻辑删除规则（省略）
 * 2)、配置逻辑删除的组件（省略）
 * 3)、给bean加上逻辑删除注解@TableLogic
 * <p>
 * 3、JSR303
 * 1、）给bean加上校验注解 javax.validation.constraints 并定义自己得message提示
 * 2、）开启校验  在方法上加上 @Valid
 * 3、)给校验得bean后紧跟一个BindingResult,就可以获取到校验得结果
 * 4、)分组校验
 * 1)、@Null(message = "新增不能指定id",groups = {AddGroup.class})
 * 给校验注解标注什么情况需要进行校验
 * 2)、@Validated({UpdateGroup.class})
 * 3)、默认没有指定分组的校验注解,在分组校验情况下不生效，只会在@Validated生效
 * <p>
 * 4、统一得异常处理
 *
 * @ControllerAdvice 1)、编写异常处理类,使用@ControllerAdvice
 * 2)、使用@ExceptionHandler标注方法可以处理的异常
 * <p>
 * 5、自定义校验
 * 1）、编写一个自定义的校验注解
 * 2)、编写一个自定义的校验器
 * 3)、关联自定义的校验器和自定义的校验注解
 *
 * 5、
 */
@EnableRedisHttpSession
@EnableCaching
@EnableFeignClients(basePackages = "com.sap.mall.product.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class MallProductApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MallProductApplication.class, args);
//        String[] beanDefinitionNames = run.getBeanDefinitionNames();
//        for (String bean : beanDefinitionNames){
//            System.out.println(bean);
//        }
    }

}
